package br.com.vti.sisp_sicrim.antigo.controller.relatorios;

import java.io.FileNotFoundException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.model.SicCadastro;
import br.com.vti.sisp_sicrim.antigo.util.Relatorios;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;

/**
 * Classe responsavel por encapsular o tratamento e as consistencias da tela
 * Infsegp3Report
 * 
 * @author Incode - Data: mai/2014
 * 
 */
public class Infsegp3Report {
	private int jPos;
	private String[] jMsgerr = new String[11];
	private int jCount;
	private String dataCorrente;
	private Long registroEstadualGeral; // DB
	private String nomeCompleto; // DB
	private String nroPagina;
	private Result result;
	private Sessao sessao;
	private Relatorios report;
	// Classes views
	SicCadastro criminalView = new SicCadastro(); // Classes includes

	public Infsegp3Report() throws JRException, ParseException {
		inicializar();
	}

	public Infsegp3Report(Sessao sessao) throws JRException, ParseException {
		this.sessao = sessao;
		inicializar();
	}

	public void inicializar() throws JRException, ParseException {
		report = new Relatorios();
		jPos = 0;
		Arrays.fill(jMsgerr, "");
		jCount = 0;
		dataCorrente = new SimpleDateFormat("dd/MM/yyyy").format(Calendar.getInstance().getTime()); // *DATE
		report.setNumeroRel(1, "C");
		{
			report.setNumeroLinhaRel(1, 1);
			{
				report.adicionaCampo(1, 2, "lit_1_2", "C", "", "  ");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(2, 3);
			{
				report.adicionaCampo(1, 61, "lit_1_61", "C", "", "* GEJUSPC-GERENCIA DA JUSTICA, SEGURANCA PUBLICA E CIDADANIA ");
				report.adicionaCampo(110, 8, "lit_110_8", "C", "", "PAGINA: ");
				report.adicionaCampo(119, 5, "nroPagina", "S", "Z.ZZ9", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(3, 3);
			{
				report.adicionaCampo(1, 33, "lit_1_33", "C", "", "* SECRETARIA DE SEGURANCA PUBLICA");
				report.adicionaCampo(110, 8, "lit_110_8", "C", "", "DATA..: ");
				report.adicionaCampo(119, 10, "dataCorrente", "S", "", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(4, 1);
			{
				report.adicionaCampo(1, 47, "lit_1_47", "C", "", "* INSTITUICAO DE IDENTIFICACAO CIVIL E CRIMINAL");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(5, 1);
			{
				report.adicionaCampo(1, 40, "lit_1_40", "C", "", "* RELATORIO DE NOMES CRIMINAIS INVALIDOS");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(6, 1);
			{
				report.adicionaCampo(1, 1, "lit_1_1", "C", "", "-");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(7, 4);
			{
				report.adicionaCampo(2, 11, "lit_2_11", "C", "", " IDENTIDADE");
				report.adicionaCampo(14, 17, "lit_14_17", "C", "", "NOME DO INDIVIDUO");
				report.adicionaCampo(75, 3, "lit_75_3", "C", "", "POS");
				report.adicionaCampo(79, 16, "lit_79_16", "C", "", "MENSAGEM DE ERRO");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(8, 1);
			{
				report.adicionaCampo(1, 1, "lit_1_1", "C", "", "-");
				report.setFimLinhaRel();
			}
		}
		report.setNumeroRel(2, "D");
		{
			report.setNumeroLinhaRel(1, 4);
			{
				report.adicionaCampo(1, 13, "Registroestadualgeral", "N", "", "");
				report.adicionaCampo(15, 60, "Nomecompleto", "X", "", "");
				report.adicionaCampo(76, 2, "Jpos", "N", "", "");
				report.adicionaCampo(79, 45, "Jmsgerr", "X", "", "");
				report.setFimLinhaRel();
			}
		}
		report.setNumeroRel(3, "D");
		{
			report.setNumeroLinhaRel(1, 1);
			{
				report.adicionaCampo(1, 1, "lit_1_1", "C", "", "-");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(2, 2);
			{
				report.adicionaCampo(1, 22, "lit_1_22", "C", "", "REGISTROS INVALIDOS = ");
				report.adicionaCampo(24, 6, "Jcount", "N", "", "");
				report.setFimLinhaRel();
			}
		}
		setDataCorrente(dataCorrente);
	}

	public boolean validar() {
		// validar os campos recebidos da tela
		return true;
	}

	public int getJpos() {
		return jPos;
	}

	public void setJpos(int jPos) throws ParseException {
		this.jPos = jPos;
		report.adicionaValorReport("Jpos", jPos);
	}

	public String[] getJmsgerr() {
		return jMsgerr;
	}

	public void setJmsgerr(String[] jMsgerr) throws ParseException {
		this.jMsgerr = jMsgerr;
		report.adicionaValorReport("Jmsgerr", jMsgerr);
	}

	public void setJmsgerr(int index, String jMsgerr) throws ParseException {
		this.jMsgerr[index] = jMsgerr;
		report.adicionaValorReport("Jmsgerr", jMsgerr);
	}

	public int getJcount() {
		return jCount;
	}

	public void setJcount(int jCount) throws ParseException {
		this.jCount = jCount;
		report.adicionaValorReport("Jcount", jCount);
	}

	public String getNroPagina() {
		return nroPagina;
	}

	public void setNroPagina(String nroPagina) throws ParseException {
		this.nroPagina = nroPagina;
		report.adicionaValorReport("nroPagina", nroPagina);
	}

	public String getDataCorrente() {
		return dataCorrente;
	}

	public void setRegistroEstadualGeral(long registroEstadualGeral) throws ParseException {
		this.registroEstadualGeral = registroEstadualGeral;
		report.adicionaValorReport("RegistroEstadualGeral", registroEstadualGeral);
	}

	public void setNomeCompleto(String nomeCompleto) throws ParseException {
		this.nomeCompleto = nomeCompleto;
		report.adicionaValorReport("NomeCompleto", nomeCompleto);
	}

	public void setDataCorrente(String dataCorrente) throws ParseException {
		this.dataCorrente = dataCorrente;
		report.adicionaValorReport("dataCorrente", dataCorrente);
	}

	public void setPageSize(int pagesize) throws JRException {
		report.setPageSize(pagesize);
	}

	public void setLineSize(int linesize) {
		report.setLineSize(linesize);
	}

	public int getPageSize() {
		return report.getPageSize();
	}

	public int getPageLine() {
		return report.getPageLine();
	}

	public void saltaLinhas(int qtdLinhas) throws ParseException, JRException {
		report.saltaLinhas(qtdLinhas);
	}

	public void gravaRelatorio(int nroRel) throws ParseException, JRException {
		setNroPagina(String.valueOf(report.getPageNumber()));
		report.gravaRelatorio(report, nroRel, false);
	}

	public InputStreamDownload imprimir() throws FileNotFoundException, JRException {
		return report.imprimir();
	}

}
